export default {
	// 为当前模块开启命名空间
	namespaced: true,
	// 模块的 state 数据
	state: () => ({
		// 购物车数组，用来存储购物车中每个商品的信息
		cart: JSON.parse(uni.getStorageSync('cart') || '[]'),
		// states: true
	}),
	// 模块的 mutations 方法
	mutations: {
		addToCart(state, goods) {
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if (result) {
				// 如果已经添加过了
				result.goods_count += 1
			} else {
				// 首次添加
				state.cart.push(goods)
			}
			// 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
			this.commit('m_cart/saveToStorage')
		},
		// 数据保存到本地存储
		saveToStorage(state) {
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		},
		// 修改选中按钮状态
		updateGoodsState(state, goods) {
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if (result) {
				result.goods_state = goods.goods_state
				this.commit('m_cart/saveToStorage')
			}
		},
		// 修改商品数量
		updateGoodsCount(state, goods) {
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if (result) {
				result.goods_count = goods.goods_count
				this.commit('m_cart/saveToStorage')
			}
		},
		// 删除商品的方法
		removeGoodsById(state, goods) {
			state.cart = state.cart.filter(item => item.goods_id !== goods.goods_id)
			uni.$showMsg('删除成功')
			this.commit('m_cart/saveToStorage')
		},
		// 处理全选按钮的全选反选状态
		updateAllGoodsState(state, newstate) {
			state.cart.forEach(item => item.goods_state = newstate)
			// 持久化存储到本地
			this.commit('m_cart/saveToStorage')
		}
	},
	// 模块的 getters 属性
	getters: {
		// 计算加入购物车总数量
		total(state) {
			return state.cart.reduce((prev, item) => prev + item.goods_count, 0)
		},
		// 计算底栏的全选反选状态
		isFullCheck(state) {
			// if (state.cart.length <= 0) return !state.states
			return state.cart.every(item => item.goods_state)
		},
		// 计算商品总价格
		checkedCountPrice(state) {
			return state.cart.filter(item => item.goods_state).reduce((prev, item) => prev + item.goods_count *
					item.goods_price, 0)
				.toFixed(2)
		},
		// 计算选中商品的总数量
		checkedCount(state) {
			return state.cart.filter(item => item.goods_state).reduce((prev, item) => prev + item.goods_count, 0)
		}
	},
}
